/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package manejadores;

import beans2.Reserva;
import beans2.Recurso;
import beans2.Usuario;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Administrador
 */
public class ManejadorReserva
{
    private Connection connection;
    private ArrayList list;
    private ResultSet resultSet;
    private Reserva reserva;
    public void setConnection(Connection connection) {
        this.connection = connection;
    }

    public ArrayList getList() {
        return list;
    }
    
    public void setCondition(String condition)throws SQLException
    {
        if(!condition.equalsIgnoreCase(""))
        {
            condition="and " + condition;
        }
        list=new ArrayList();
        PreparedStatement statement=connection.prepareStatement("select idreserva, idrecurso, reserva.idusuario, idaprobador, idsolicitudreserva, fechainicio, horainicio, fechafinal, horafinal, estado, reserva.observacion, ubicacion, personaretiro, nombreoperativo from reserva, usuario where reserva.idusuario = usuario.idusuario" + condition+" order by idreserva", ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE, ResultSet.HOLD_CURSORS_OVER_COMMIT);
        resultSet=statement.executeQuery();
        while(resultSet.next())
        {
            reserva=new Reserva();
            reserva.setIdReserva(resultSet.getInt(1));
            int idRecurso=resultSet.getInt(2);
            ManejadorRecurso manejadorRecurso=new ManejadorRecurso();
            manejadorRecurso.setConnection(connection);
            manejadorRecurso.setCondition("idrecurso="+idRecurso);
            Recurso recurso=manejadorRecurso.getRecurso();
            reserva.setRecurso(recurso);
            reserva.setTiporecurso(recurso.getTipoRecurso());
            int idUsuario=resultSet.getInt(3);
            Usuario usuario=new Usuario();
            usuario.setId(idUsuario);
            reserva.setIdaprobador(resultSet.getInt(4));
            reserva.setIdsolicitudreserva(resultSet.getInt(5));
            reserva.setFechainicio(resultSet.getString(6));
            reserva.setHorainicio(resultSet.getString(7));
            reserva.setFechafinal(resultSet.getString(8));
            reserva.setHorafinal(resultSet.getString(9));
            reserva.setEstado(resultSet.getString(10));
            reserva.setObservacion(resultSet.getString(11));
            reserva.setUbicacion(resultSet.getString(12));
            reserva.setPersonaRetiro(resultSet.getString(13));
            usuario.setNombreOperativo(resultSet.getString(14));
            reserva.setUsuario(usuario);
            list.add(reserva);
        }
    }
    
    public void setIndex(int index)
    {
        reserva=(Reserva)list.get(index);
    }
    
    public void anular() throws SQLException
    {
        String str="update reserva set estado='N' where idreserva="+reserva.getIdReserva();
        PreparedStatement statement=connection.prepareStatement(str);
        statement.executeUpdate();
        connection.commit();
    }

    public Reserva getReserva() {
        return reserva;
    }
    
    public void setReserva(Reserva reserva)
    {
        this.reserva=reserva;
    }
    
    public boolean update()throws SQLException
    {
        String str="select * from reserva where idrecurso = " + reserva.getRecurso().getId() + " and ( ( ( fechainicio < '" + reserva.getFechainicio() + "' or ( fechainicio = '" + reserva.getFechainicio() + "' and horainicio < '" + reserva.getHorainicio() + "') ) and ( fechafinal > '" + reserva.getFechainicio() + "' or ( fechafinal = '" + reserva.getFechainicio() + "' and horafinal > '" + reserva.getHorainicio() + "') ) and ( fechafinal < '" + reserva.getFechafinal() + "' or ( fechafinal = '" + reserva.getFechafinal() + "' and horafinal < '" + reserva.getHorafinal() + "') ) ) or ( ( fechainicio > '" + reserva.getFechainicio() + "' or ( fechainicio = '" + reserva.getFechainicio() + "' and horainicio > '" + reserva.getHorainicio() + "') ) and ( fechainicio < '" + reserva.getFechafinal() + "' or ( fechainicio = '" + reserva.getFechafinal() + "' and horainicio < '" + reserva.getHorafinal() + "') ) and ( fechafinal > '" + reserva.getFechafinal() + "' or ( fechafinal = '" + reserva.getFechafinal() + "' and horafinal > '" + reserva.getHorafinal() + "') ) ) or ( ( fechainicio < '" + reserva.getFechainicio() + "' or ( fechainicio = '" + reserva.getFechainicio() + "' and horainicio < '" + reserva.getHorainicio() + "') ) and ( fechafinal > '" + reserva.getFechafinal() + "' or ( fechafinal = '" + reserva.getFechafinal() + "' and horafinal > '" + reserva.getHorafinal() + "') ) ) or ( ( fechainicio > '" + reserva.getFechainicio() + " ' or ( fechainicio = ' " + reserva.getFechainicio() + " ' and horainicio > '" + reserva.getHorainicio() + " ' )  ) and ( fechafinal < ' " + reserva.getFechafinal() + " ' or ( fechafinal = ' " + reserva.getFechafinal() + " ' and horafinal < ' " + reserva.getHorafinal() + " ' ) ) ) )";
        PreparedStatement statement = connection.prepareStatement(str);
        ResultSet aux = statement.executeQuery();
        if (aux.next())
        {
            return false;
        } else {
            statement = connection.prepareStatement("update reserva set idtiporecurso='"+reserva.getRecurso().getTipoRecurso().getId()+"', fechainicio='"+reserva.getFechainicio()+"', horainicio='"+reserva.getHorainicio()+"', fechafinal='"+reserva.getFechafinal()+"', horafinal='"+reserva.getHorafinal()+"', observacion='"+reserva.getObservacion()+"', ubicacion='"+reserva.getUbicacion()+"', personaretiro='"+reserva.getPersonaRetiro()+"', idrecurso='"+reserva.getRecurso().getId()+"', idaprobador='"+reserva.getIdaprobador()+"' where idreserva='"+reserva.getIdReserva()+"'");
            statement.executeUpdate();
            connection.commit();
            return true;
        }
    }
}
